#include "pid.h"
int ww=0;						   //占空比

int optem;  			           // 目标温度
int tem; 	 		               //当前温度
int n=0;
double tem_et[tem_e_length]={0};   //温度差的数组
double tem_e=0;					   //当前比例项					
double tem_de=0;				   //当前积分项
double tem_ei=0;				   //当前微分项

float Kp=0.1; 				       //比例系数
float Ki=0; 				       //微分系数
float Kd=0.00005;				   //积分系数
double u=0;						   //结果

float pidtem(void)
{
	double ui = 0;
	if(Kp*tem_e+Ki * tem_ei+Kd * tem_de >= 0 && Kp * tem_e + Ki * tem_ei + Kd * tem_de <= 1)
		{ui = Kp * tem_e + Ki * tem_ei + Kd * tem_de;}
	if(Kp * tem_e + Ki * tem_ei + Kd * tem_de < 0)
		{ui = 0;}
	if(Kp * tem_e +Ki * tem_ei + Kd * tem_de > 1){ui = 1;}
	return ui;
}

void controltem (void)
{
	tem_e=optem-tem;
	if (tem_e > 10){
		u=1;
	}
	else if (tem_e < 0){
		u=0;
	}
	else{
		tem_et[n]=tem_e;    //记录列表，先进先出，长度为tem_e_length
		n++;            
		n=n%tem_e_length;
		tem_ei=tem_ei+tem_e;//积分项
		if(n-1<0){//
		tem_de=tem_et[n]-tem_et[n+tem_e_length-1];}
		else
		{tem_de=tem_et[n]-tem_et[n-1];}
		u=pidtem();
	}
	ww=u*100/1;
}

